#!/usr/bin/python
import os
import sys
import shutil
import glob
import md5
from agente import *
from leer_config import *
from lex import *
from stoplist import *
import time


def cargar(path):
	StopList()
	path = os.path.abspath(path)
	if os.path.isfile(path):
		cargarArchivo(path)
	if os.path.isdir(path):
		cargarDirectorio(path)


#Abre el archivo y lo examina para cargar los terminos
#Funcion principal para indexar documentos
#Analiza los terminos del archivo uno por uno y
#si es un termino valido lo almacena en la base de datos
def cargarArchivo(path):
	rutaDoc = leer_workspace()
	archivo = os.path.basename(path)
	i = 1
	extension = os.path.splitext(path)
	if extension[1] == ".txt":
		#Si la ruta del archivo es el directorio de documentos
		#no se copia, pero si no lo es, se copia, para tener
		#todos los documentos en el mismo directorio
		#Si existe el documento(mismo nombre) se incrementa su indice
		copiar = True
		if os.path.dirname(path)+"/" != rutaDoc:
			while glob.glob(rutaDoc+archivo) and copiar:
				old = rutaDoc+archivo
				if igual(old, path):
					copiar = False	
				else:
					l = os.path.splitext(archivo)
					name = str(l[0]).split('(')[0]+"("+str(i)+")"
					archivo = name + l[1]
					i = i + 1
			if copiar:
				shutil.copy(path, rutaDoc+archivo)
			path = rutaDoc+archivo
		#Cargar archivo en la base de datos
		#para poder copiar, si existe deberia saltar una excepcion
		#para no duplicar datos RESUELTO
		if copiar and not Agente().get_Documento_ruta(path):
			Agente().insertar_Documento(archivo, path)
			#Examinar archivo para detectar terminos
			f = open(path, "r")
			cargarAnalizador(f.read())
			f.close()
			l = []
			while 'True':
				tok = obtenerToken()
				if not tok: break
				palabra = tok.value.lower()
				if (tok.type == 'PALABRA' or tok.type == 'NUMERO' or tok.type == 'NUMERO_REAL' or tok.type == 'IP'
						or tok.type == 'MAIL' or tok.type == 'FECHA') and not StopList().estaEn(palabra):
					l.append(palabra)	
			almacenarTerminos(l,archivo)	
		else:
			print "Documento existente"		
	else: 
		print "Archivo '"+os.path.basename(path)+"' no permitido"

def cargarDirectorio(path):
	lista = os.listdir(path)
	for archivo in lista:
		cargarArchivo(path+"/"+archivo)

def igual(old, new):
	fold = open(old,"r")
	fnew = open(new,"r")
	sold = md5.new(str(fold.read())).digest()
	snew = md5.new(str(fnew.read())).digest()
	fold.close()
	fnew.close()
	return sold == snew

def almacenarTerminos(l,titulo):
	aux=[]
	doc=Agente().get_Documento_titulo(titulo)
	for i in l:
		if aux.count(i)==0:
			ter=Agente().get_Termino(i)
			if not ter:
				Agente().insertar_Termino(i,1)			
				ter=Agente().get_Termino(i)
			else:
				Agente().aumentaFrecTermino(i,ter)
			num=l.count(i)
			print ter
			Agente().insertar_Termino_doc(ter[0][0], doc[0][0], num)
			aux.append(i)
